x86emul: fix SYSENTER/SYSCALL switching into 64-bit mode
authorJan Beulich <jbeulich@suse.com>
Fri, 5 Mar 2021 14:32:24 +0000 (15:32 +0100)
committerJan Beulich <jbeulich@suse.com>
Fri, 5 Mar 2021 14:32:24 +0000 (15:32 +0100)
commit865eba02a1ec10972edbeb403b492e45e391f509
tree013217fb3e3b867a573bc7cac982e303ef9b2656
parentdaa4149647e1ba5ea22de346e1894ae793a17500
x86emul: fix SYSENTER/SYSCALL switching into 64-bit mode

When invoked by compat mode, mode_64bit() will be false at the start of
emulation. The logic after complete_insn, however, needs to consider the
mode switched into, in particular to avoid truncating RIP.

Inspired by / paralleling and extending Linux commit 943dea8af21b ("KVM:
x86: Update emulator context mode if SYSENTER xfers to 64-bit mode").

While there, tighten a related assertion in x86_emulate_wrapper() - we
want to be sure to not switch into an impossible mode when the code gets
built for 32-bit only (as is possible for the test harness).

Signed-off-by: Jan Beulich <jbeulich@suse.com>
Reviewed-by: Andrew Cooper <andrew.cooper3@citirix.com>
master commit: f3e1eb2f0234c955243a915d69ebd84f26eec130
master date: 2021-02-11 17:53:10 +0100
xen/arch/x86/x86_emulate/x86_emulate.c